
import java.util.Collection;
import java.util.Date;
import javax.swing.JOptionPane;
import org.hibernate.Session;
import org.hibernate.Transaction;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author igor_ufrn
 */
public class ProcessadorMovimentosBanco {

    public Object execute(Object obj, int comando) {

        switch (comando) {
            case (ComandosParaExecutar.CADASTRAR_CLIENTE):
                return cadastrarCliente( (Cliente) obj);            
            case (ComandosParaExecutar.CADASTRAR_PRODUTO):
                return cadastrarProduto( (Produto) obj);
            case (ComandosParaExecutar.CADASTRAR_FUNCIONARIO):
                return cadastrarFuncionario( (Funcionario) obj);
            default:
                JOptionPane.showMessageDialog(null, "Comando Desconhecido");
        }

        return null;
    }

    private Cliente cadastrarCliente(Cliente cliente) {
        
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        session.save(cliente.getEndereco());
        session.save(cliente);
        tx.commit();
        session.close();

        return cliente;
    }

    


    private Produto cadastrarProduto(Produto produto) {

        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        session.save(produto);
        tx.commit();
        session.close();

        return produto;
    }

    private Funcionario cadastrarFuncionario(Funcionario funcionario) {

        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        session.save(funcionario.getEndereco());
        session.save(funcionario);
        tx.commit();
        session.close();

        return funcionario;
    }


    public void efetuarCompra(Cliente c, Funcionario f , Collection<Produto> produtos) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();

        Venda venda = new Venda();        
        venda.setCliente(c);
        venda.setData(new Date());
        venda.setFuncionario(f);
        session.save(venda);

        for(Produto p : produtos) {
            ItemVenda itemVenda = new ItemVenda();
            itemVenda.setProduto(p);
            itemVenda.setVenda(venda);
            itemVenda.setCliente(c);
            session.save(itemVenda);
        }




        tx.commit();
        session.close();
    }
}